/**
 *
 * 1. 功能：用于增强Vue
 * 2. 本质：包含install方法的一个对象，install的第一个参数是Vue，第二个以后的参数是插件使用者传递的数据。
 * 3. 定义插件：
 *     ```
 *     对象.install = function (Vue, options) {
 *         // 1. 添加全局过滤器
 *         Vue.filter(....)
 *
 *         // 2. 添加全局指令
 *         Vue.directive(....)
 *
 *         // 3. 配置全局混入(合)
 *         Vue.mixin(....)
 *
 *         // 4. 添加实例方法
 *         Vue.prototype.$myMethod = function () {...}
 *         Vue.prototype.$myProperty = xxxx
 *     }
 *     ```
 * 4. 使用插件：```Vue.use()```
 *
 */
// const obj = {
//     install() {
//         console.log('@@@', 'install');
//     }
// }
// // 默认暴露，如果是暴露出一个对象的话，就直接省略花括号{}
// export default {obj};


// 其中，如果只有一个对象的话，默认暴露可以省略变量的定义
export default {
    // 其中Vue参数是vm的缔造者Vue构造函数
    install(Vue, x, y, z) {
        console.log('@@@', 'install', Vue);
        console.log(x, y, z);

        // 全局过滤器
        Vue.filter('mySlice', function (value) {
            return value.slice(0, 2);
        })

        // 定义全局指令
        Vue.directive('fbind', {
            // 指令与元素成功绑定的时候（一上来）
            bind(element, binding) {
                element.value = binding.value;
            },
            // 指令所在元素被插入页面的时候
            inserted(element) {
                element.focus();
            },
            // 指令所在的模板被重新解析的时候
            update(element, binding) {
                element.value = binding.value;
            }
        })

        // 定义混入
        Vue.mixin({
            data() {
                return {
                    x: 100,
                    y: 100,
                }
            }
        })

        // 给Vue原型上添加一个方法【该方法在vm和vc都可以使用了】
        Vue.prototype.hello = () => {
            alert('您好啊！');
        }
    }
}


